package br.unicarioca.viaexpositus

import br.unicarioca.viaexpositus.ases.*
import br.unicarioca.viaexpositus.ErrosRegra as ErrosVia

class RelatorioAsesService {

    AsesCliente avaliador = new AsesCliente();

    Avaliacao avaliarAcessibilidade(String conteudo) {
        //TODO Remover o modo fixo
        String dtdPath = "http://localhost:8080/via/dtd"

        //println "dtdPath = "+dtdPath

		AsesCliente.setDtdBasePath(dtdPath);

        avaliador.avalia(conteudo);
        if(avaliador.isErrado()){
            RelatorioAses viaRelatorio = new RelatorioAses()
            viaRelatorio.listErroP1 = createViaErrosRegra(avaliador.getRelatorio().listErroP1)
            viaRelatorio.listErroP2 = createViaErrosRegra(avaliador.getRelatorio().listErroP2)
            viaRelatorio.listErroP3 = createViaErrosRegra(avaliador.getRelatorio().listErroP3)
            viaRelatorio.listAvisoP1 = createViaErrosRegra(avaliador.getRelatorio().listAvisoP1)
            viaRelatorio.listAvisoP2 = createViaErrosRegra(avaliador.getRelatorio().listAvisoP2)
            viaRelatorio.listAvisoP3 = createViaErrosRegra(avaliador.getRelatorio().listAvisoP3)

            viaRelatorio.listErroXHTML = createViaErrosRegraFromXHTML( avaliador.getRelatorio().listErroXHTML )


            Avaliacao aval = new Avaliacao()
            aval.relatorio = viaRelatorio
            aval.tipoDeAvaliacao = TipoDeAvaliacao.findByNome(TipoDeAvaliacao.AVALIACAO_SOFTWARE)

            log.info aval.properties
            return aval
        }

	}


    private List<ErrosVia> createViaErrosRegra(def listaErrosRegra){
        def listaViaErros = []
        listaErrosRegra.each{ errosRegra ->
            def errosVia = new ErrosVia()

            errosVia.codigo = errosRegra.getCodigo()
            errosVia.texto  = errosRegra.getTexto()
            errosVia.quantidadeDeOcorrencias = errosRegra.getListOcorrencia().size()
            errosVia.linhasDeOcorrencia    =   errosRegra.getListOcorrencia()*.linha.join(',')

            listaViaErros << errosVia
        }

        return listaViaErros
    }


    private List<ErrosVia> createViaErrosRegraFromXHTML(def listaErrosRegra){
        def listaViaErros = []
        listaErrosRegra.each{ errosRegra ->
            def errosVia = new ErrosVia()

            errosVia.codigo = errosRegra.getCodigo()
            errosVia.texto  = errosRegra.getTexto()
            errosVia.quantidadeDeOcorrencias = 1
            errosVia.linhasDeOcorrencia    =   errosRegra.getListOcorrencia().get(0).getLinha()

            listaViaErros << errosVia
        }

        return listaViaErros
    }

}

